package main

import "fmt"

/*
1、介绍
插入排序属于内部排序法，是对于欲排序的元素以插入的方式找寻该元素的适当位置，以达到排序的目的
2、思想
插入排序的基本思想是：
把n个待排序的元素看成为一个有序表和一个无序表，开始时有序表中只包含一个元素，无序表中包含有n-1个元素
排序过程中每次从无序表中取出第一个元素，把它的排序码依次与有序表元素的排序码进行比较，将它插入到有序表中的
适当位置，使之成为新的有序表
*/
func InsertSort(arr *[5]int) {
	for i := 1; i < len(arr); i++ {
		//完成第一次，给第二个元素找到合适的位置并插入
		//insertIndex指的是有序表中最后一个元素的下标
		insertVal := arr[i]
		insertIndex := i - 1
		//从大到小
		//insertVal找到合适位置后就将有序数组后移
		for insertIndex >= 0 && arr[insertIndex] < insertVal {
			arr[insertIndex+1] = arr[insertIndex] //数据后移
			insertIndex--
		}
		//插入
		if insertIndex+1 != i {
			arr[insertIndex+1] = insertVal
		}
		fmt.Printf("第%d次插入后%v\n", i, *arr)
	}

}
func main() {
	arr := [5]int{23, 0, 12, 56, 34}
	InsertSort(&arr)
}
